﻿''' <summary>
''' Sending simple messages to and from the server.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure MessageStructure
    Public Property Message As String
End Structure

''' <summary>
''' When sent to the server, it's an upload.
''' When sent to the client, it's a download.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure PokemonData
    Public Property IP As String
    Public Property ID As String
    Public Property PokemonName As String
    Public Property PokemonData As Byte()
End Structure

''' <summary>
''' Deletes the sender's reservation.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure DeleteStructure
    Public Property IP As String
End Structure

''' <summary>
''' Used to perform searching on the server.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure SearchRequest
    'If true, use name.
    Public Property Search As Boolean
    Public Property Name As String
End Structure

''' <summary>
''' The results from said search.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure SearchResults
    Public Property Results As List(Of String)
    Public Property Search As Boolean
End Structure

''' <summary>
''' Reserves a Pokemon.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure ReservePokemon
    Public Property IP As String
    Public Property ID As String
    Public Property Overwrite As Boolean
End Structure

''' <summary>
''' Requests additional information or requests a download of the given pokemon.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure RequestPokemonInformation
    Public Property ID As String
    Public Property KeyOption As Options
End Structure

''' <summary>
''' Extremely large information structure that holds all information
''' about a Pokemon (nearly all).
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure Information

    <Serializable()> Public Structure Stats
        Public Property HP As String
        Public Property Attack As String
        Public Property Defense As String
        Public Property Speed As String
        Public Property Sp_Atk As String
        Public Property Sp_Def As String
    End Structure

    <Serializable()> Public Structure IV
        Public Property HP As String
        Public Property Attack As String
        Public Property Defense As String
        Public Property Speed As String
        Public Property Sp_Atk As String
        Public Property Sp_Def As String
    End Structure

    <Serializable()> Public Structure EV
        Public Property HP As String
        Public Property Attack As String
        Public Property Defense As String
        Public Property Speed As String
        Public Property Sp_Atk As String
        Public Property Sp_Def As String
    End Structure

    Public Property Name As String
    Public Property Gender As String
    Public Property Nature As String
    Public Property Origin As String
    Public Property OTName As String
    Public Property NickName As String
    Public Property InternalID As String

    Public Property DexNumber As Integer
    Public Property OTID As Integer
    Public Property SID As Integer
    Public Property Exp As Integer
    Public Property Level As Integer

    Public Property Shiny As Boolean
    Public Property FateFulEncounter As Boolean
    Public Property IsEgg As Boolean

    Public Property Moves As List(Of String)

    Public Property PkmIV As IV
    Public Property PkmEV As EV
    Public Property PkmStats As Stats

End Structure

''' <summary>
''' Files a report against a Pokemon.
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Structure ReportPokemon
    Public Property ID As String
    Public Property ReportedBy As String
    Public Overrides Function ToString() As String
        Return ID
    End Function
End Structure

#Region "chat structures"

<Serializable()> Public Structure ChatMessage
    Public Property sender As String
    Public Property message As String
End Structure

<Serializable()> Public Structure FullList
    Public Property userlist As List(Of String)
End Structure

<Serializable()> Public Structure IndividualPerson
    Public Property person As String
    Public Property login As Boolean
End Structure

#End Region

<Serializable()> Public Enum Options
    Information = 1
    Download = 2
End Enum